package gobelinmaker.server;

import ij.ImagePlus;
import java.awt.Dimension;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;

/**
 * Virtuális webkamerát megvalósító osztály.
 *
 * @author imruf84
 */
public class VirtualWebcam {

    /**
     * Kép.
     */
    private BufferedImage image;
    /**
     * Ablak.
     */
    Dimension r = new Dimension(200, 200);
    /**
     * Motorvezérlők.
     */
    private final MotorControl mcx;
    private final MotorControl mcy;

    /**
     * Konstruktor.
     *
     * @param fileName fájl neve
     * @param mcx vízszintes motor vezérlője
     * @param mcy függőleges motor vezérlője
     */
    public VirtualWebcam(String fileName, MotorControl mcx, MotorControl mcy) {
        this.mcx = mcx;
        this.mcy = mcy;

        try {
            image = ImageIO.read(getClass().getResource(fileName));
        } catch (IOException ex) {
            System.err.println(ex.getLocalizedMessage());
        }
        System.out.println("SERVER:image " + fileName + " loaded.");
    }

    /**
     * Kép lekérdezése.
     *
     * @return kép
     */
    public BufferedImage getImage() {

        long x = Math.max(0, this.mcx.getCurrentMicroSteps());
        long y = Math.max(0, this.mcy.getCurrentMicroSteps());

        if (null == this.image) {
            return null;
        }

        // Mesterséges zajjal tesszük életszerűbbé a képet.
        BufferedImage result = this.image.getSubimage((int) x, (int) y, r.width, r.height);
        ImagePlus imgp = new ImagePlus();
        imgp.setImage(result);
        imgp.getProcessor().noise(60);

        return imgp.getBufferedImage();
    }

}
